home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / PIL / XpmImagePlugin.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  3KB  |  86 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. __version__ = '0.2'
  5. import re
  6. import string
  7. import Image
  8. import ImageFile
  9. import ImagePalette
  10. xpm_head = re.compile('"([0-9]*) ([0-9]*) ([0-9]*) ([0-9]*)')
  11.  
  12. def _accept(prefix):
  13.     return prefix[:9] == '/* XPM */'
  14.  
  15.  
  16. class XpmImageFile(ImageFile.ImageFile):
  17.     format = 'XPM'
  18.     format_description = 'X11 Pixel Map'
  19.     
  20.     def _open(self):
  21.         if not _accept(self.fp.read(9)):
  22.             raise SyntaxError, 'not an XPM file'
  23.         
  24.         while None:
  25.             s = self.fp.readline()
  26.             if not s:
  27.                 raise SyntaxError, 'broken XPM file'
  28.             
  29.             m = xpm_head.match(s)
  30.             if m:
  31.                 break
  32.                 continue
  33.             continue
  34.             self.size = (int(m.group(1)), int(m.group(2)))
  35.             pal = int(m.group(3))
  36.             bpp = int(m.group(4))
  37.             if pal > 256 or bpp != 1:
  38.                 raise ValueError, 'cannot read this XPM file'
  39.             
  40.         palette = [
  41.             '\x00\x00\x00'] * 256
  42.         for i in range(pal):
  43.             s = self.fp.readline()
  44.             if s[-2:] == '\r\n':
  45.                 s = s[:-2]
  46.             elif s[-1:] in '\r\n':
  47.                 s = s[:-1]
  48.             
  49.             c = ord(s[1])
  50.             s = string.split(s[2:-2])
  51.             for i in range(0, len(s), 2):
  52.                 if s[i] == 'c':
  53.                     rgb = s[i + 1]
  54.                     if rgb == 'None':
  55.                         self.info['transparency'] = c
  56.                     elif rgb[0] == '#':
  57.                         rgb = string.atoi(rgb[1:], 16)
  58.                         palette[c] = chr(rgb >> 16 & 255) + chr(rgb >> 8 & 255) + chr(rgb & 255)
  59.                     else:
  60.                         raise ValueError, 'cannot read this XPM file'
  61.                     break
  62.                     continue
  63.             else:
  64.                 raise ValueError, 'cannot read this XPM file'
  65.         
  66.         self.mode = 'P'
  67.         self.palette = ImagePalette.raw('RGB', string.join(palette, ''))
  68.         self.tile = [
  69.             ('raw', (0, 0) + self.size, self.fp.tell(), ('P', 0, 1))]
  70.  
  71.     
  72.     def load_read(self, bytes):
  73.         (xsize, ysize) = self.size
  74.         s = [
  75.             None] * ysize
  76.         for i in range(ysize):
  77.             s[i] = string.ljust(self.fp.readline()[1:xsize + 1], xsize)
  78.         
  79.         self.fp = None
  80.         return string.join(s, '')
  81.  
  82.  
  83. Image.register_open('XPM', XpmImageFile, _accept)
  84. Image.register_extension('XPM', '.xpm')
  85. Image.register_mime('XPM', 'image/xpm')
  86.